rename関数は、ファイルやフォルダ(ディレクトリ)の名前を変更します。この関数で名前を変更するには、他のプロセスでファイルやフォルダを使用していないことや、変更する為の権限を持っていることなどがあります。
#include <stdio.h>
int rename(const char *oldpath, const char *newpath);
*oldpathは名前を変更するファイルやフォルダのパス名を指定します。
*newpathは変更後のパス名を指定します。
第2引数のnewpathの存在する場所により、意味合いが多少変わります。第1引数のoldpathと同じ場所の場合は、名前の変更になりますし、異なる場所の場合は移動になります。
戻り値として、変更できた場合は0を、エラーの場合は-1を返します。
プログラム 例
#include <stdio.h> int main(int argc, char **argv) { char ans; int return_code = 0; if (argc == 3) { printf('%sを%sに変更しますか?(y/n)==> ', *(argv + 1), *(argv + 2)); scanf('%c', &ans); if (ans == 'Y' || ans == 'y') { if (rename(*(argv + 1), *(argv + 2)) == 0) { printf('変更しました\n'); } else { printf('変更できませんでした\n'); return_code = 1; } } else { printf('キャンセルします\n'); } } else { printf('実行時引数の数が不当です\n'); return_code = 2; } return return_code; }
例の実行結果
$ ls -l DIR1 合計 4 -rw-r--r-- 1 user users 75 2008-07-02 11:09 temp_2.txt $ $ ./rename.exe DIR1 DIR2 DIR1をDIR2に変更しますか?(y/n)==> y 変更しました $ $ ls -l DIR1 DIR2 ls: cannot access DIR1: そのようなファイルやディレクトリはありません DIR2: 合計 4 -rw-r--r-- 1 user users 75 2008-07-02 11:09 temp_2.txt $ $ ./rename.exe DIR2/temp_2.txt DIR2/temp_3.txt DIR2/temp_2.txtをDIR2/temp_3.txtに変更しますか?(y/n)==> y 変更しました $ $ ls -l DIR2 合計 4 -rw-r--r-- 1 user users 75 2008-07-02 11:09 temp_3.txt $ $ ls -l temp*.txt -rw-r--r-- 1 user users 78 2008-06-06 17:28 temp.txt -rw-r--r-- 1 user users 20 2008-07-04 09:03 temp_1.txt $ $ ./rename.exe temp_1.txt ../temp_1.txt temp_1.txtを../temp_1.txtに変更しますか?(y/n)==> y 変更しました $ $ ls -l temp*.txt -rw-r--r-- 1 user users 78 2008-06-06 17:28 temp.txt $ ls -l ../temp*.txt -rw-r--r-- 1 user users 20 2008-07-04 09:03 ../temp_1.txt $